import { fileURLToPath, URL } from 'node:url';
import { defineConfig, ConfigEnv, UserConfig, loadEnv } from 'vite';
import vue from '@vitejs/plugin-vue';
import vueDevTools from 'vite-plugin-vue-devtools';
// 增加 vue文件 script name值
import vueSetupExtend from 'vite-plugin-vue-setup-extend';
// 生产gz文件
import viteCompression from 'vite-plugin-compression';

import path from 'path';
function resolve(dir) {
  return path.join(__dirname, '.', dir);
}

// https://vite.dev/config/
export default defineConfig(({ mode }: ConfigEnv): UserConfig => {
  const env = loadEnv(mode, __dirname); // 根据 mode 来判断当前是何种环境
  return {
    plugins: [
      vue(),
      vueSetupExtend(),
      // gzip压缩 生产环境生成 .gz 文件
      mode === 'production' &&
        viteCompression({
          verbose: true,
          disable: false,
          threshold: 10240,
          algorithm: 'gzip',
          ext: '.gz'
        })
    ],
    // css: {
    //   preprocessorOptions: {
    //     scss: {
    //       additionalData: `@use "./src/styles/index.scss" as *;`
    //     }
    //   }
    // },
    // 配置别名
    resolve: {
      alias: {
        // '@': fileURLToPath(new URL('./src', import.meta.url)),
        '@': resolve('src'),
        static: resolve('public/static')
      },
      // 忽略后缀名的配置选项, 添加 .vue 选项时要记得原本默认忽略的选项也要手动写入
      extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue']
    },
    //启动服务配置
    server: {
      // 服务器主机名，如果允许外部访问，可设置为 "0.0.0.0" 也可设置成你的ip地址
      host: true,
      open: true,
      cors: true,
      hmr: true, // 开启热加载
      // 代理跨域（模拟示例）
      proxy: {
        // 带选项写法（对象）
        '/api': {
          target: env.VITE_API_BASE_URL, // 从环境变量文件取值
          changeOrigin: true, // 支持跨域
          rewrite: (path) => path.replace(/^\/api/, '') // 路径重写
        },
        '/test': {
          // target: 'http://8.137.125.65:20010/device', // 从环境变量文件取值
          target: 'http://121.40.183.61:9095', // 从环境变量文件取值
          // target: 'https://recycleapitest.sky1688.cn/device', // 从环境变量文件取值
          // target: 'https://recycleapi.sky1688.cn/device', // 从环境变量文件取值
          changeOrigin: true, // 支持跨域
          rewrite: (path) => path.replace(/^\/test/, '') // 路径重写
        },
        // 代理 websockets 或 socket.io 
        // '/socket.io': {
        //   target: 'ws://localhost:5174',
        //   // 支持 websocket
        //   ws: true
        // }
      }
    }
  };
});
